package com.wlsk.license.common.converter;

import org.springframework.mock.web.MockMultipartFile;
import org.springframework.web.multipart.MultipartFile;
import java.io.File;
import java.io.FileInputStream;
import java.io.IOException;
import java.nio.file.Files;

public class MultipartFileConverter {

    /**
     * 将File转换为MultipartFile
     * @param file 要转换的文件
     * @return MultipartFile对象
     * @throws IOException 文件读取异常
     */
    public static MultipartFile convert(File file) throws IOException {
        return convert(file, "file");
    }

    /**
     * 将File转换为MultipartFile
     * @param file 要转换的文件
     * @param fieldName 表单字段名
     * @return MultipartFile对象
     * @throws IOException 文件读取异常
     */
    public static MultipartFile convert(File file, String fieldName) throws IOException {
        if (file == null || !file.exists()) {
            throw new IllegalArgumentException("文件不存在或为null");
        }

        String fileName = file.getName();
        String contentType = Files.probeContentType(file.toPath());

        try (FileInputStream inputStream = new FileInputStream(file)) {
            return new MockMultipartFile(
                    fieldName,           // 表单字段名
                    fileName,           // 原始文件名
                    contentType,        // 内容类型
                    inputStream         // 文件输入流
            );
        }
    }

    /**
     * 将File转换为MultipartFile（手动指定内容类型）
     * @param file 要转换的文件
     * @param fieldName 表单字段名
     * @param contentType 内容类型
     * @return MultipartFile对象
     * @throws IOException 文件读取异常
     */
    public static MultipartFile convert(File file, String fieldName, String contentType) throws IOException {
        if (file == null || !file.exists()) {
            throw new IllegalArgumentException("文件不存在或为null");
        }

        String fileName = file.getName();

        try (FileInputStream inputStream = new FileInputStream(file)) {
            return new MockMultipartFile(
                    fieldName,
                    fileName,
                    contentType,
                    inputStream
            );
        }
    }

    /**
     * 将byte[]转换为MultipartFile
     * @param fileBytes 文件字节数组
     * @param originalFilename 原始文件名
     * @return MultipartFile对象
     */
    public static MultipartFile convert(byte[] fileBytes, String originalFilename) {
        return convert(fileBytes, originalFilename, "file");
    }

    /**
     * 将byte[]转换为MultipartFile
     * @param fileBytes 文件字节数组
     * @param originalFilename 原始文件名
     * @param fieldName 表单字段名
     * @return MultipartFile对象
     */
    public static MultipartFile convert(byte[] fileBytes, String originalFilename, String fieldName) {
        if (fileBytes == null) {
            throw new IllegalArgumentException("文件字节数组不能为null");
        }
        return new MockMultipartFile(
                fieldName,
                originalFilename,
                null, // 内容类型，可以为null
                fileBytes
        );
    }
}